
const express = require('express');
const app = express();
const mysql = require('mysql2');
const bodyParser = require('body-parser');

// 设置模板引擎为 EJS
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

// 创建数据库连接池
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: '123456',
  database: 'contacts'
});

// 配置中间件
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// 创建一个路由处理 / 的 GET 请求
app.get('/', (req, res) => {
  // 从数据库中获取联系人数据
  pool.query('SELECT * FROM contacts', (error, results) => {
    if (error) {
      console.error('Failed to fetch contacts:', error);
      res.status(500).send('Internal Server Error');
    } else {
      const contacts = results;
      // 渲染名为 index 的 EJS 模板，并传递联系人数据作为参数
      res.render('index.html', { contacts });
    }
  });
});

// 创建一个路由处理 /contacts 的 POST 请求，用于添加联系人
app.post('/contacts', (req, res) => {
  const { name, email, phone } = req.body;

  // 执行插入操作将新联系人添加到数据库
  pool.query('INSERT INTO contacts (name, email, phone) VALUES (?, ?, ?)', [name, email, phone], (error, results) => {
    if (error) {
      console.error('Failed to add contact:', error);
      res.status(500).send('Internal Server Error');
    } else {
      res.redirect('/');
    }
  });
});

// 创建一个路由处理 /contacts/:id 的 PUT 请求，用于修改联系人
app.put('/contacts/:id', (req, res) => {
  const id = req.params.id;
  const { name, email, phone } = req.body;

  // 执行更新操作将联系人数据更新到数据库
  pool.query('UPDATE contacts SET name = ?, email = ?, phone = ? WHERE id = ?', [name, email, phone, id], (error, results) => {
    if (error) {
      console.error('Failed to update contact:', error);
      res.status(500).send('Internal Server Error');
    } else {
      res.redirect('/');
    }
  });
});

// 创建一个路由处理 /contacts/:id 的 GET 请求，用于获取单个联系人信息
app.get('/contacts/:id', (req, res) => {
  const id = req.params.id;

  // 从数据库中获取指定ID的联系人数据
  pool.query('SELECT * FROM contacts WHERE id = ?', [id], (error, results) => {
    if (error) {
      console.error('Failed to fetch contact:', error);
      res.status(500).send('Internal Server Error');
    } else {
      const contact = results[0];
      // 将联系人数据作为响应发送回前端
      res.send(contact);
    }
  });
});

// 创建一个路由处理根路由的 PUT 请求
app.put('/', (req, res) => {
  const updatedContact = req.body; // 从请求的body中获取更新后的联系人信息

  // 在数据库中更新指定ID的联系人信息
  pool.query('UPDATE contacts SET name = ?, email = ? WHERE id = ?', [updatedContact.name, updatedContact.email, updatedContact.id], (error, results) => {
    if (error) {
      console.error('Failed to update contact:', error);
      res.status(500).send('Internal Server Error');
    } else {
      res.send('Contact updated successfully');
    }
  });
});



// 创建一个路由处理 /contacts/:id 的 DELETE 请求，用于删除联系人
app.delete('/contacts/:id', (req, res) => {
  const id = req.params.id;

  // 执行删除操作将指定的联系人从数据库中删除
  pool.query('DELETE FROM contacts WHERE id = ?', [id], (error, results) => {
    if (error) {
      console.error('Failed to delete contact:', error);
      res.status(500).send('Internal Server Error');
    } else {
      res.redirect('/');
    }
  });
});

// 启动服务器，监听指定的端口
app.listen(5050, () => {
  console.log('Server is running on port 5050');
});




